// 按照题目编号要求，所有数组从1开始
#include<bits/stdc++.h>
using namespace std;

int main(){
	int m,n;
	int w[10005];
	
	cin >> n >> m;
	for(int i = 1 ; i <= n ; i ++)
		cin >> w[i];
	
	int mt[m + 1] = {0}; // 每个水龙头将被占用到什么时候
	int nowt = 0; // 当前时间
	
	// 初始化水龙头：为1-m编号的同学分配水龙头
	for(int i = 1 ; i <= m ; i ++){
		// 如果同学人数不足，提前退出
		if(i > n)
			break;
		mt[i] += w[i];
	}
	
	int nowp = m + 1; // 下一位轮到的同学
	// 遍历直到后续没有同学
	while(nowp <= n){
		nowt ++;
		for(int i = 1; i <= m; i++){
			if(nowt > mt[i]){
				mt[i] += w[nowp];
				nowp++;
				// 如果后续没有同学应该及时跳出，否则可能导致数组越界
				// 虽然在这种写法下没有影响通过题目，但比赛里有可能有更严格的测试点数据
				if(nowp > n)
					break;
			}
		}
	}
	// 得到最终答案前水龙头使用完毕的最大时间
	int ans = 0;
	for(int i = 1; i <= m; i++){
		ans = max(ans, mt[i]);
	}
	cout << ans;
	
	return 0;
}
